/**
 * \file CDAO.h
 * \author Corentin Le Bail
 * \date 2009-2013
 * \brief Fichier de déclaration de la class CDAO
 */
//------------------------------------------------------------------------------
#ifndef __CDAO_H__
#define __CDAO_H__
//------------------------------------------------------------------------------
#include <QStringList>
#include <QString>
#include <QVariant>
//------------------------------------------------------------------------------
/**
 * \class CDAO CDAO.h "CDAO.h"
 * \brief Classe de base de l'accès aux champs de la base de données.
 */
class CDAO {
	private:
		QStringList keys;
		QStringList fields;
	protected:
		/**
		 * \fn void addKey(QString keyName)
		 * \brief Ajoute une clé à la liste des clés
		 * \param[in] keyName Nom de la clé à ajouter
		 */
		void addKey(QString keyName) { keys.append(keyName); }
		/**
		 * \fn void addField(QString fieldName)
		 * \brief Ajoute un champ à la liste des champs
		 * \param[in] fieldName Nom du champ à ajouter
		 */
		void addField(QString fieldName) { fields.append(fieldName); }
	public:
		/**
		 * \fn CDAO(void)
		 * \brief Constructeur
		 */
		CDAO(void) {}
		virtual ~CDAO(void) {}
		/**
		 * \fn virtual void set(QString fieldName, QVariant value)
		 * \brief Affecte la valeur d'un champ
		 * \param[in] fieldName Nom du champ
		 * \param[in] value Valeur du champ
		 */
		virtual void set(QString fieldName, QVariant value) = 0;
		/**
		 * \fn virtual QVariant get(QString fieldName)
		 * \param[in] fieldName Nom du champ
		 * \return La valeur du champ filedName
		 */
		virtual QVariant get(QString fieldName) = 0;
		/**
		 * \fn virtual QString getTableName(void) = 0
		 * \return La nom de la table de la base de données
		 */
		virtual QString getTableName(void) = 0;
		/**
		 * \fn const QStringList& getKeys(void)
		 * \return La liste des clés
		 */
		const QStringList& getKeys(void) { return keys; }
		/**
		 * \fn const QStringList& getFields(void)
		 * \return La liste des champs
		 */
		const QStringList& getFields(void) { return fields; }
		/**
		 * \fn QString toString(void)
		 * \return La représentation du champ en mode texte
		 */
		QString toString(void);
		/**
		 * \fn void toNull(void)
		 * \brief Met tous les champs à NULL
		 */
		void toNull(void);
};
//------------------------------------------------------------------------------
#endif //__CDAO_H__
//------------------------------------------------------------------------------